/********************************* 
*-- 33 KDH Knieja ---------------*
*-- im. Harcerzy Września 1939 --*
*-- autor: Marcin Rzepisko ------*
**********************************/

package net.kdh.knieja.model.wspolne;

import java.sql.Timestamp;
import java.util.Calendar;

/**
 *
 * @author rz.marcin@gmail.com
 */
public class DataCzas {
    private DataCzas(){}
    public static Timestamp biezacaDataCzas() {
        return new Timestamp(Calendar.getInstance().getTimeInMillis());
    }
    /**
     * Zwraca nowy obiekt typu {@link Timestamp} różny od aktualnej daty o {@code roznicaWartosci}
     *  w zależności od parametru {@code wielkosc}
     *  
     *  <li> Y - rok</li>
     * <li> M - miesiąc</li>
     * <li> D - dzień</li>
     * <li> h - godzina</li>
     * <li> m - minuta</li>
     * <li> s - sekunda</li>
     * 
     * @param roznicaWartosci wartość +/- różnicy odcinka czasu
     * @param wielkosc znak określający wartość zmienianą
     * @return {@link Timestamp}
     */
    public static Timestamp nowaDataOdTeraz(Long roznicaWartosci, char wielkosc) {
        Long aktualnyCzas = biezacaDataCzas().getTime();
        
        switch(wielkosc) {
            case('Y'): {
                roznicaWartosci*=1000*60*60*24*356;
                Timestamp x = biezacaDataCzas();
                break;
            }
            case('M'): {
                roznicaWartosci*=30;
            }
            case('D'): {
                roznicaWartosci*=24;
            }
            case('h'): {
                roznicaWartosci*=60;
            }
            case('m'): {
                roznicaWartosci*=60;
            }
            case('s'): {
                roznicaWartosci*=1000;
            }
            default:;
        }
        return(new Timestamp(aktualnyCzas+roznicaWartosci));
    }
    /** 
     * {@inheritDoc}
     * domyslna wartosc: {@literal D}
     * @param roznicaWartosci
     * @return {@link Timestamp}
     */
    public static Timestamp nowaDataOdTeraz(Long roznicaWartosci) {
        return nowaDataOdTeraz(roznicaWartosci, 'D');
    }
    public static boolean czyPrzed(Timestamp t1, Timestamp t2) {
        return t1.before(t2);
    }
    public static boolean czyPo(Timestamp t1, Timestamp t2) {
        return t1.after(t2);
    }
    public static boolean czyRowna(Timestamp t1, Timestamp t2) {
        return t1.getTime() == t2.getTime();
    }
    public static boolean czyMinelo(Timestamp t) {
        return czyPo(t, biezacaDataCzas());
    }
    public static int roznicaSekund(Timestamp t1, Timestamp t2) {
        Long roznica = t1.after(t2) ? (t1.getTime() - t2.getTime()) : (t2.getTime() - t1.getTime());
        roznica/=1000;
        return new Integer(roznica.toString());
    }
}
